/**
 * 🔔 通用顶部消息通知组件
 * 
 * 功能：
 * - 显示各类消息通知（加好友、活动申请、系统消息等）
 * - 支持自动消失
 * - 支持点击跳转
 * - 支持自定义样式和图标
 */

Component({
  properties: {},
  
  data: {
    // 是否显示通知
    visible: false,
    // 通知内容
    content: '',
    // 用户头像
    avatarUrl: '',
    // 用户名
    userName: '',
    // 通知类型：friend_request(加好友), activity_join(加入活动), system(系统消息)
    type: 'system',
    // 额外数据（用于跳转等）
    extraData: null,
    // 动画效果
    animationData: {},
    // 状态栏高度（px）
    statusBarHeight: 0,
    // 🎯 顶部安全距离（px，避开刘海屏）
    safeTop: 0
  },
  
  lifetimes: {
    attached() {
      // 组件创建时获取状态栏高度
      this.getSafeAreaHeight();
    },
    
    detached() {
      // 组件销毁时清除定时器
      if (this.hideTimer) {
        clearTimeout(this.hideTimer);
        this.hideTimer = null;
      }
    }
  },
  
  methods: {
    /**
     * 获取安全区域高度（学习publish页面的实现方式）
     */
    getSafeAreaHeight() {
      try {
        // 🎯 使用wx.getSystemInfoSync()获取系统信息（与publish页面保持一致）
        const systemInfo = wx.getSystemInfoSync();
        const statusBarHeight = systemInfo.statusBarHeight || 0;
        
        // 🎯 关键修复：直接使用px单位，添加适当间距避开刘海
        // statusBarHeight是状态栏高度（刘海屏区域）
        // 再加10px作为额外的安全间距
        const safeTopPx = statusBarHeight + 10; // px单位，更准确
        
        console.log('📱 状态栏高度:', statusBarHeight, 'px');
        console.log('📱 安全顶部距离:', safeTopPx, 'px (避开刘海)');
        
        this.setData({
          statusBarHeight: statusBarHeight,
          safeTop: safeTopPx // 🔥 现在是px单位
        });
      } catch (error) {
        console.error('❌ 获取安全区域高度失败:', error);
        // 设置默认值（适配大多数手机）
        this.setData({
          statusBarHeight: 44,
          safeTop: 54 // 44px + 10px
        });
      }
    },
    
    /**
     * 显示通知
     * @param {Object} options 通知选项
     * @param {string} options.content - 通知内容
     * @param {string} options.type - 通知类型
     * @param {string} options.avatarUrl - 用户头像
     * @param {string} options.userName - 用户名
     * @param {Object} options.extraData - 额外数据
     * @param {number} options.duration - 显示时长（毫秒），默认3000ms
     */
    show(options = {}) {
      console.log('🔔 显示通知:', options);
      
      const {
        content = '您有一条新消息',
        type = 'system',
        avatarUrl = '',
        userName = '',
        extraData = null,
        duration = 3000
      } = options;
      
      // 创建进入动画
      const animation = wx.createAnimation({
        duration: 300,
        timingFunction: 'ease-out'
      });
      
      animation.translateY(0).opacity(1).step();
      
      this.setData({
        visible: true,
        content,
        type,
        avatarUrl,
        userName,
        extraData,
        animationData: animation.export()
      });
      
      // 自动隐藏
      if (this.hideTimer) {
        clearTimeout(this.hideTimer);
      }
      
      this.hideTimer = setTimeout(() => {
        this.hide();
      }, duration);
    },
    
    /**
     * 隐藏通知
     */
    hide() {
      console.log('🔔 隐藏通知');
      
      // 创建退出动画
      const animation = wx.createAnimation({
        duration: 300,
        timingFunction: 'ease-in'
      });
      
      animation.translateY(-100).opacity(0).step();
      
      this.setData({
        animationData: animation.export()
      });
      
      // 动画结束后隐藏
      setTimeout(() => {
        this.setData({
          visible: false,
          content: '',
          avatarUrl: '',
          userName: '',
          extraData: null
        });
      }, 300);
      
      if (this.hideTimer) {
        clearTimeout(this.hideTimer);
        this.hideTimer = null;
      }
    },
    
    /**
     * 点击通知
     */
    onNotificationTap() {
      console.log('🔔 点击通知');
      
      const { type, extraData } = this.data;
      
      // 隐藏通知
      this.hide();
      
      // 根据类型进行跳转
      this.handleNavigation(type, extraData);
    },
    
    /**
     * 处理跳转
     */
    handleNavigation(type, extraData) {
      console.log('🔔 处理跳转:', type, extraData);
      
      switch (type) {
        case 'friend_request':
          // 跳转到消息页面的"好友申请"标签页
          wx.navigateTo({
            url: '/pages/message/index?tab=1'
          });
          break;
          
        case 'activity_join':
          // 跳转到活动详情或活动管理页面
          if (extraData && extraData.activityId) {
            wx.navigateTo({
              url: `/pages/activity-detail/index?id=${extraData.activityId}`
            });
          } else {
            wx.navigateTo({
              url: '/pages/activity-manage/index'
            });
          }
          break;
          
        case 'activity_approved':
        case 'activity_rejected':
          // 跳转到历史记录页面
          wx.navigateTo({
            url: '/pages/history/index'
          });
          break;
          
        case 'chat':
          // 🔥 新增：跳转到聊天页面
          if (extraData && extraData.friendId) {
            const friendName = encodeURIComponent(extraData.userName || '好友');
            const friendAvatar = encodeURIComponent(extraData.userAvatarUrl || '');
            // 🔥 修复：同时传递数据库ID和手机号（融云用户ID）
            // extraData.friendId 可能是数据库ID或手机号，需要判断
            const friendId = extraData.friendId || '';
            const friendPhone = extraData.friendPhone || extraData.userPhone || '';
            wx.navigateTo({
              url: `/pages/chat/index?friendId=${friendId}&friendName=${friendName}&friendAvatar=${friendAvatar}&friendPhone=${friendPhone}`
            });
          } else {
            // 如果没有好友ID，跳转到消息列表
            wx.navigateTo({
              url: '/pages/message/index'
            });
          }
          break;
          
        case 'system':
        default:
          // 跳转到消息页面
          wx.navigateTo({
            url: '/pages/message/index'
          });
          break;
      }
    },
    
    /**
     * 点击关闭按钮
     */
    onCloseTap(e) {
      // 阻止冒泡到父元素
      e.stopPropagation();
      this.hide();
    }
  }
});

